package com.myself.module.source.leetcode;

import java.util.*;

/**
 * @author 瑟瑟发抖
 * @version 1.0
 * @description leetcode算法题
 * @date 2024/4/11 11:52
 */
public class Solution {
    public static void main(String[] args) {

    }

    //两数之和
    public int[] twoSum(int[] nums, int target) {
        int[] result = {};
        LinkedHashMap<Integer, Integer> map = new LinkedHashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if (map.containsKey(target - nums[i])) {
                return new int[]{i, map.get(target - nums[i])};
            }
            map.put(nums[i], i);
        }
        return result;
    }

    //字母异位词分组
    public List<List<String>> groupAnagrams(String[] strs) {
        LinkedHashMap<String, List<String>> map = new LinkedHashMap<>();
        for (String str : strs) {
            char[] charArray = str.toCharArray();
            Arrays.sort(charArray);
            String s = new String(charArray);
            List<String> list = map.getOrDefault(s, new LinkedList<>());
            list.add(str);
            map.put(s, list);
        }

        return new ArrayList<>(map.values());

    }

    //最长连续序列
    public int longestConsecutive(int[] nums) {
        HashSet<Integer> set = new HashSet<>();
        for (int num : nums) {
            set.add(num);
        }
        Integer longestInteger = 0;
        for (Integer integer : set) {
            if (!set.contains(integer - 1)) {
                Integer currentInteger = integer;
                Integer currentStreak = 1;
                currentStreak = 1;
                while (set.contains(currentInteger + 1)) {
                    currentInteger++;
                    currentStreak++;

                }
                longestInteger = Math.max(longestInteger, currentStreak);
            }
        }
        return longestInteger;
    }

    // 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
    public void moveZeroes(int[] nums) {
        int zeroIndex = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != 0) {
                int temp = nums[i];
                nums[i] =nums[zeroIndex] ;
                nums[zeroIndex++] = temp;
            }
        }
    }
    //给定一个长度为 n 的整数数组 height 。有 n 条垂线，第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
    //
    //找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。
    //
    //返回容器可以储存的最大水量。
    public void maxArea(int[] height) {

    }

}
